{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入函数库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-04T06:34:50.437517Z",
     "start_time": "2020-06-04T06:34:49.189689Z"
    }
   },
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "from tensorflow import keras  # 在TF2.0版本中,已经是自带Keras了,所以不需要额外安装\n",
    "import tensorflow_datasets as tfds # 这个是之前说过的Tensorflow Datasets\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 定义网络结构"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 一些参数设置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-04T06:34:50.481012Z",
     "start_time": "2020-06-04T06:34:50.476134Z"
    }
   },
   "outputs": [],
   "source": [
    "layers = tf.keras.layers\n",
    "models = tf.keras.models"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 定义LeNet5用于手势识别"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-04T06:34:50.487129Z",
     "start_time": "2020-06-04T06:34:50.482042Z"
    }
   },
   "outputs": [],
   "source": [
    "def LeNet5(input_shape=(32, 32, 3),\n",
    "         classes=3):\n",
    "    img_input = layers.Input(shape=input_shape)  # 输入节点\n",
    "    #第一层卷积：5*5 padding valid s=1   Out n=（32-5）/1+1=28\n",
    "    x = layers.Conv2D(64, (5, 5),\n",
    "                      activation='relu',\n",
    "                      padding='valid',\n",
    "                      name='conv1')(img_input)\n",
    "    x = layers.BatchNormalization()(x)\n",
    "    #第一层池化（avg，尺寸2）Out n=14\n",
    "    x = layers.AveragePooling2D()(x)\n",
    "    #第二层卷积：5*5 padding valid s=1 Out n=（14-5）/1+1=10\n",
    "    x = layers.Conv2D(64, (5, 5),\n",
    "                      activation='relu',\n",
    "                      padding='valid',\n",
    "                      name='conv2')(x)\n",
    "    x = layers.BatchNormalization()(x)\n",
    "    #第二层池化（avg，尺寸2） Out n=5\n",
    "    x = layers.AveragePooling2D()(x)\n",
    "    \n",
    "    x = layers.Flatten()(x)\n",
    "    x = layers.Dense(512, activation='relu', name='fc1')(x)\n",
    "    x = layers.BatchNormalization()(x)\n",
    "    x = layers.Dense(128, activation='relu', name='fc2')(x)\n",
    "    x = layers.BatchNormalization()(x)\n",
    "    x = layers.Dense(classes, activation='softmax', name='predictions')(x)\n",
    "    \n",
    "    inputs = img_input  # inputs是输入节点\n",
    "    outputs = x # outputs是输出节点\n",
    "    model = models.Model(inputs, outputs , name='lenet5')  # 生成一个Model, 需要指定输入和输出\n",
    "    \n",
    "    return model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-03T06:52:16.860688Z",
     "start_time": "2020-06-03T06:52:16.855923Z"
    }
   },
   "source": [
    "## 声明一个LeNet5模型实例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-04T06:34:50.977100Z",
     "start_time": "2020-06-04T06:34:50.487969Z"
    }
   },
   "outputs": [],
   "source": [
    "model = LeNet5()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 记录模型训练过程中的日志"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-04T06:34:51.088721Z",
     "start_time": "2020-06-04T06:34:50.978582Z"
    }
   },
   "outputs": [],
   "source": [
    "log_dir = './logs'\n",
    "tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 进行数据增强"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-04T06:34:51.098161Z",
     "start_time": "2020-06-04T06:34:51.090676Z"
    }
   },
   "outputs": [],
   "source": [
    "def convert(image, label):\n",
    "    image = tf.image.convert_image_dtype(image, tf.float32) # Cast and normalize the image to [0,1]\n",
    "    image = tf.image.resize(image, size=[32, 32])\n",
    "    return image, label\n",
    "\n",
    "def augment(image,label):\n",
    "    image,label = convert(image, label)\n",
    "    image = tf.image.random_flip_left_right(image)\n",
    "    image = tf.image.random_brightness(image, max_delta=0.5) # Random brightness\n",
    "    return image,label"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据读取并预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-04T06:34:51.329125Z",
     "start_time": "2020-06-04T06:34:51.099932Z"
    }
   },
   "outputs": [],
   "source": [
    "# 此处使用tfds的方式构建data pipeline\n",
    "(raw_test, raw_train), metadata = tfds.load(\n",
    "    'rock_paper_scissors', # 数据集名称，这个是手势识别分类数据集，共3个类别\n",
    "    split=['test', 'train'], # 这里的raw_test和split的'test'对应，raw_train和split的'train'对应\n",
    "    with_info=True, # 这个参数和metadata对应\n",
    "    as_supervised=True, # 这个参数的作用是返回tuple形式的(input, label),举个例子，raw_test=tuple(input, label)\n",
    "    shuffle_files=True,  # 对数据进行扰乱操作，可以自己体会下设置成False时，下面imshow的时候的结果差别\n",
    "    data_dir='./tensorflow_datasets'\n",
    ")\n",
    "\n",
    "BATCH_SIZE = 4\n",
    "SHUFFLE_BUFFER_SIZE = 2520\n",
    "\n",
    "# 可以体验下这里是否加prefetch(tf.data.experimental.AUTOTUNE)和cache()的区别，对训练速度，以及CPU负载有影响\n",
    "train_batches = raw_train.shuffle(SHUFFLE_BUFFER_SIZE, reshuffle_each_iteration=True).map(augment).batch(BATCH_SIZE).prefetch(tf.data.experimental.AUTOTUNE)\n",
    "test_batches = raw_test.map(convert).batch(BATCH_SIZE)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 进行模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-04T06:35:53.121481Z",
     "start_time": "2020-06-04T06:34:51.330080Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "630/630 [==============================] - 10s 16ms/step - loss: 0.8999 - accuracy: 0.6532\n",
      "Epoch 2/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.7925 - accuracy: 0.7615\n",
      "Epoch 3/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.7329 - accuracy: 0.8198\n",
      "Epoch 4/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.7132 - accuracy: 0.8444\n",
      "Epoch 5/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6741 - accuracy: 0.8829\n",
      "Epoch 6/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6612 - accuracy: 0.8929\n",
      "Epoch 7/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6567 - accuracy: 0.9028\n",
      "Epoch 8/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6439 - accuracy: 0.9119\n",
      "Epoch 9/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6413 - accuracy: 0.9127\n",
      "Epoch 10/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6337 - accuracy: 0.9242\n",
      "Epoch 11/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6261 - accuracy: 0.9266\n",
      "Epoch 12/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6310 - accuracy: 0.9230\n",
      "Epoch 13/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6345 - accuracy: 0.9175\n",
      "Epoch 14/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6198 - accuracy: 0.9337\n",
      "Epoch 15/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6148 - accuracy: 0.9409\n",
      "Epoch 16/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6235 - accuracy: 0.9325\n",
      "Epoch 17/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6112 - accuracy: 0.9444\n",
      "Epoch 18/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6041 - accuracy: 0.9520\n",
      "Epoch 19/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.6035 - accuracy: 0.9508\n",
      "Epoch 20/20\n",
      "630/630 [==============================] - 8s 13ms/step - loss: 0.5989 - accuracy: 0.9575\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.keras.callbacks.History at 0x2b790ab7f60>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),\n",
    "             loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n",
    "             metrics=['accuracy'])\n",
    "\n",
    "model.fit(\n",
    "    train_batches,\n",
    "    epochs=20,\n",
    "    callbacks=[tensorboard_callback]\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-04T06:17:38.349132Z",
     "start_time": "2020-06-04T06:17:38.347130Z"
    }
   },
   "source": [
    "## 训练后的模型预测展示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-04T06:35:53.778150Z",
     "start_time": "2020-06-04T06:35:53.122643Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "scissors\n",
      "paper\n",
      "paper\n",
      "rock\n",
      "rock\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "get_label_name = metadata.features['label'].int2str\n",
    "\n",
    "for image, label in raw_test.take(5):\n",
    "    image, label = convert(image, label)\n",
    "    predict = np.argmax(model.predict(np.expand_dims(image, axis=0)))\n",
    "    print(get_label_name(predict))\n",
    "    plt.figure()\n",
    "    plt.imshow(image)\n",
    "    plt.title(get_label_name(label))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Baseline的test acc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-04T06:35:54.193396Z",
     "start_time": "2020-06-04T06:35:53.779035Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "93/93 [==============================] - 1s 6ms/step - loss: 0.6895 - accuracy: 0.8441\n",
      "Baseline test accuracy:  0.84408605\n",
      "Saved baseline model to:  ./test.h5\n"
     ]
    }
   ],
   "source": [
    "_, baseline_model_accuracy = model.evaluate(test_batches, verbose=1)\n",
    "print('Baseline test accuracy: ', baseline_model_accuracy)\n",
    "\n",
    "keras_file = './test.h5'\n",
    "tf.keras.models.save_model(model, keras_file, include_optimizer=False)\n",
    "print('Saved baseline model to: ', keras_file)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "environment": {
   "name": "tf2-gpu.2-1.m46",
   "type": "gcloud",
   "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-1:m46"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "498.594px"
   },
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
